package com.design.patterns.structuralModel.mediator;

import com.design.patterns.structuralModel.mediator.service.MediatorStructure;
import com.design.patterns.structuralModel.mediator.service.HouseOwner;
import com.design.patterns.structuralModel.mediator.service.Tenant;

/**
 * 中介模式
 * 目的：用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变它们之间的交互。
 *
 * 中介者主要是通过中介对象来封装对象之间的关系，使之各个对象在不需要知道其他对象的具体信息情况下通过中介者对象来与之通信。
 * 同时通过引用中介者对象来减少系统对象之间关系，提高了对象的可复用和系统的可扩展性。
 *
 * 但是当出现多对多的情况时，要谨慎使用中介者模式
 */
public class MediatorMain {

    /**
     * 我们现在以租房为例，写一个小示例，来展示中介者模式的使用方法
     */
    public static void main(String[] args) {
        //一个房主、一个租房者、一个中介机构
        MediatorStructure mediator = new MediatorStructure();

        //房主和租房者只需要知道中介机构即可
        HouseOwner houseOwner = new HouseOwner("张三", mediator);
        Tenant tenant = new Tenant("李四", mediator);

        //中介结构要知道房主和租房者
        mediator.setHouseOwner(houseOwner);
        mediator.setTenant(tenant);

        tenant.constact("听说你那里有三室的房主出租.....");
        houseOwner.constact("是的!请问你需要租吗?");
    }
}
